package bean;

import entidade.Departamento;
import entidade.Departamento_;
import java.util.ArrayList;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import util.JPAUtil;
import util.JSFUtil;

@ManagedBean
@RequestScoped
public class DepartamentoBean {
    
    private Departamento departamento = new Departamento();
    private List<Departamento> departamentos = new ArrayList<Departamento>();

    public DepartamentoBean() {
        listar();
    }

    public void salvar() {
        
        EntityManager em = null;
        EntityTransaction trans = null;
        
        try {
            em = JPAUtil.getEntityManager();
            trans = em.getTransaction();
            trans.begin();
            em.merge(departamento);
            trans.commit();
            listar();
            JSFUtil.addMsg("OK ! ", "Departamento Salvo com sucesso ! ", FacesMessage.SEVERITY_INFO);
            limpar();
            
        } catch (Exception e) {
            
            JSFUtil.addMsg("Erro ! ", "Houve um erro ao salvar o Departamento ", FacesMessage.SEVERITY_ERROR);
            if (trans != null && trans.isActive()) {
                trans.rollback();
            }
        }
        
    }
    
    public void apagar(){
        EntityManager em = null;
        EntityTransaction trans = null;
        
        try {
            em = JPAUtil.getEntityManager();
            trans = em.getTransaction();
            trans.begin();
            Departamento departamentoB = em.find(Departamento.class, departamento.getIdDepartamento());
            em.remove(departamentoB);
            trans.commit();
            listar();
            JSFUtil.addMsg("OK ! ", "Departamento apagado com sucesso ! ", FacesMessage.SEVERITY_INFO);
            limpar();
            
        } catch (Exception e) {
            
            JSFUtil.addMsg("Erro ! ", "Houve um erro ao apagar o Departamento ", FacesMessage.SEVERITY_ERROR);
            if (trans != null && trans.isActive()) {
                trans.rollback();
            }
        }
        
    }
    
    private void listar(){
        EntityManager em = JPAUtil.getEntityManager();
        departamentos = em.createNamedQuery("Departamento.findAll").getResultList();
        JPAUtil.closeEntityManager(em);
    }
    
    private void limpar(){
        departamento = new Departamento();
    }

    public Departamento getDepartamento() {
        return departamento;
    }

    public void setDepartamento(Departamento departamento) {
        this.departamento = departamento;
    }

    public List<Departamento> getDepartamentos() {
        return departamentos;
    }

    public void setDepartamentos(List<Departamento> departamentos) {
        this.departamentos = departamentos;
    }

    
}
